#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>


typedef char BTDataType;

typedef struct BinaryTreeNode
{
	BTDataType data;
	struct BinartTreeNode* right;
	struct BinaryTreeNode* left;
}BTNode;

#include "QListNode.h"

BTNode* BuyNode( BTDataType x);
void BTPrevOrder(BTNode* root);
void BTInOder(BTNode* root);
void BTPostOder(BTNode* root);
void BTDestory(BTNode** root);

void BTDestory(BTNode* root);
// 二叉树节点个数
int BTSize(BTNode* root);

// 二叉树叶子节点个数
int BTLeafSize(BTNode* root);

// 二叉树第k层节点个数
int BTLevelKSize(BTNode* root, int k);

// 二叉树查找值为x的节点
BTNode* BTFind(BTNode* root, BTDataType x);

// 层序遍历
void BTLevelOrder(BTNode* root);

// 判断二叉树是否是完全二叉树
int BTComplete(BTNode* root);

// 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树
BTNode* BTCreate(BTDataType* a, int n, int* pi);